gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 19 章 基于语音识别的信号灯图像模拟控制技术/voicebox/rfft.m
function y=rfft(x,n,d) %RFFT Calculate the DFT of real data Y=(X,N,D) % Data is truncated/padded to length N if specified. % N even: (N+2)/2 points are returned with % the first and last being real % N odd: (N+1)/2 points are returned with the % first being real % In all cases fix(1+N/2) points are returned % D is the dimension along which to do the DFT % Copyright (C) Mike Brookes 1998 % Version: $Id: rfft.m,v 1.8 2010/12/10 14:25:00 dmb Exp $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% s=size(x); if prod(s)==1 y=x else if nargin <3 || isempty(d) d=find(s>1,1); if nargin<2 n=s(d); end end if isempty(n) n=s(d); end y=fft(x,n,d); y=reshape(y,prod(s(1:d-1)),n,prod(s(d+1:end))); s(d)=1+fix(n/2); y(:,s(d)+1:end,:)=[]; y=reshape(y,s); end